package asesorportatil.marcaDell;

import asesorportatil.Portatil;
import java.util.ArrayList;
import jess.Fact;
import jess.JessException;
import jess.QueryResult;
import jess.Rete;
import jess.ValueVector;

/**
 *
 * @author markel
 */
public class AsesorDell {

    ArrayList<String> comandos;

    public AsesorDell() {
        comandos = new ArrayList<String>();
        comandos.add("(batch ././src/asesorportatil/marcaDell/Inicializar.clp)");
    }

    public ArrayList<String> getComandos() {
        comandos.add("(mostrar_todo)");
        return comandos;
    }

    public void caracteristicaPredefinido(String configuracion) {
        if (configuracion.equalsIgnoreCase("Estación de trabajo")) {
            caracteristicaCPU(2400, 3000);
            caracteristicaPantalla(16.0, 18.0);
            caracteristicaRAM(4, 8);
            caracteristicaDiscoDuro(500, 1000);
        }
        else if (configuracion.equalsIgnoreCase("Ultraportátil")) {
            caracteristicaPantalla(9.0, 13.0);
        }
        else if (configuracion.equalsIgnoreCase("Juegos")) {
            caracteristicaCPU(2600, 3000);
            caracteristicaPantalla(16.0, 18.0);
            caracteristicaRAM(4, 8);
            caracteristicaDiscoDuro(250, 500);
            caracteristicaTarjetaGraf(512, 1000);
        } else{
            caracteristicaCPU(1000, 4000);
            caracteristicaPantalla(14.0, 18.0);
            caracteristicaRAM(2, 4);
            caracteristicaDiscoDuro(100, 250);
            caracteristicaTarjetaGraf(256, 512);
        }
    }

    public void caracteristicaPrecio(double precioMin, double precioMax) {
        comandos.add("(assert (rango-precio " + precioMin + " " + precioMax + "))");
    }

    public void caracteristicaPantalla(double pantallaMin, double pantallaMax) {
        comandos.add("(assert (tamagno-pantalla " + pantallaMin + " " + pantallaMax + "))");
    }

    public void caracteristicaRAM(int ramMin, int ramMax) {
        comandos.add("(assert (ram " + ramMin + " " + ramMax + "))");
    }

    public void caracteristicaBateria(int batMin, int batMax) {
        comandos.add("(assert (bateria " + batMin + " " + batMax + "))");
    }

    public void caracteristicaGarantía(int garantiaMin) {
        comandos.add("(assert (garantia " + garantiaMin + "))");
    }

    public void caracteristicaDiscoDuro(int discoMin, int discoMax) {
        comandos.add("(assert (disco " + discoMin + " " + discoMax + "))");
    }

    public void caracteristicaTarjetaGraf(int tarjetaGrafMin, int tarjetaGrafMax) {
        comandos.add("(assert (video " + tarjetaGrafMin + " " + tarjetaGrafMax + "))");
    }

    public void caracteristicaCPU(double vCPUMin, double vCPUMax) {
        comandos.add("(assert (velocidad " + vCPUMin + " " + vCPUMax + "))");
    }

    public void caracteristicaSO(String SO) {
        comandos.add("(assert (so " + SO + "))");
    }

    public ArrayList<String> devolverResultados(Rete m_rete)  {
        ArrayList resultado = new ArrayList();
        try {
            QueryResult result = m_rete.runQueryStar("obtener-portatiles", new ValueVector());
            while (result.next()) {
                Fact f = (Fact) result.getObject("port");
                String marca = f.getSlotValue("marca").toString();
                String familia = f.getSlotValue("familia").toString();
                String modelo = f.getSlotValue("nombre").toString();
                String procesador = f.getSlotValue("procesador").toString();
                String cores = f.getSlotValue("cores").toString();
                String velocidad = f.getSlotValue("velocidad").toString();
                String ram = f.getSlotValue("ram").toString();
                String tarjetaGrafica = f.getSlotValue("tarjetaGrafica").toString();
                String memGrafica = f.getSlotValue("memGrafica").toString();
                String disco = f.getSlotValue("disco").toString();
                String so = f.getSlotValue("so").toString();
                String precio = f.getSlotValue("precio").toString();
                String pantalla = f.getSlotValue("pantalla").toString();
                String duracionBateria = f.getSlotValue("duracionBateria").toString();
                String garantia = f.getSlotValue("garantia").toString();

                String descripcion = ""
                        + "Portatil  " + marca + " " + familia  + " " + modelo
                        + "\nProcesador " + procesador + " de " + cores +  " a " + velocidad + " GHz"
                        + "\nRam: " + ram + "GB"
                        + "\nPantalla " + pantalla + " pulgadas"
                        + "\nDisco Duro de  " + disco + " GB"
                        + "\nSistema Operativo: " + so
                        + "\nDuración de la bateria: " + duracionBateria + " Horas"
                        + "\nTarjeta Grafica " + tarjetaGrafica + " de " + memGrafica + " MB"
                        + "\nGarantia: " + garantia
                        + "\nA partir de : " + precio + " Euros";
                resultado.add(descripcion);
            }
        } catch (JessException ex) {
            System.out.println("ERROR IMPRIMIENDO PORTATILES DELL \n" + ex);
        }

        return resultado;
    }
    public ArrayList<String> obtenerListaPortatiles(Rete m_rete) {

        ArrayList resultado = new ArrayList();
        try {
            QueryResult result = m_rete.runQueryStar("obtener-portatiles", new ValueVector());
            while (result.next()) {
                Fact f = (Fact) result.getObject("port");
                //String marca = f.getSlotValue("Marca").toString();
                String modelo = f.getSlotValue("familia").toString();
                String descripcion = ""
                        //+ "Portatil  " + marca + " "
                       /* + "\nModelo "*/ + modelo;
                resultado.add(descripcion);
            }
        } catch (JessException ex) {
            System.out.println("ERROR IMPRIMIENDO PORTATILES DELL \n" + ex);
        }
        return resultado;
    }
    public ArrayList<Portatil> obtenerTodosLosDatos(Rete m_rete) {
        ArrayList resultado = new ArrayList();
        Portatil portatil;
        try {
            QueryResult result = m_rete.runQueryStar("obtener-portatiles", new ValueVector());
            while (result.next()) {
                portatil = new Portatil();
                Fact f = (Fact) result.getObject("port");
                String marca = f.getSlotValue("marca").toString();
                portatil.setMarca(marca);
                String familia = f.getSlotValue("familia").toString();
                portatil.setFamilia(familia);
//                String nombre = f.getSlotValue("nombre").toString();
//                portatil.setModelo(nombre);
                String procesador = f.getSlotValue("procesador").toString();
                portatil.setProcesador(procesador);
                String cores = f.getSlotValue("cores").toString();
                portatil.setCores(cores);
                String velocidad = f.getSlotValue("velocidad").toString();
                portatil.setVelocidad(velocidad);
                String ram = f.getSlotValue("ram").toString();
                portatil.setRam(ram);
                String tarjetaGrafica = f.getSlotValue("tarjetaGrafica").toString();
                portatil.setTarjetaGrafica(tarjetaGrafica);
                String peso = f.getSlotValue("peso").toString();
                portatil.setPeso(peso);
                String memGrafica = f.getSlotValue("memGrafica").toString();
                portatil.setMemGrafica(memGrafica);
                String disco = f.getSlotValue("disco").toString();
                portatil.setDisco(disco);
                String so = f.getSlotValue("so").toString();
                portatil.setSo(so);
                String precio = f.getSlotValue("precio").toString();
                portatil.setPrecio(precio);
                String pantalla = f.getSlotValue("pantalla").toString();
                portatil.setPantalla(pantalla);
                String duracionBateria = f.getSlotValue("duracionBateria").toString();
                portatil.setDuracionBateria(duracionBateria);
                String garantia = f.getSlotValue("garantia").toString();
                portatil.setGarantia(garantia);
                resultado.add(portatil);
            }
        } catch (JessException ex) {
            System.out.println("ERROR IMPRIMIENDO PORTATILES LENOVO \n" + ex);
        }

        return resultado;
    }
}
